package io.adrainty.bolee.insurance.repository;

import com.baomidou.mybatisplus.core.metadata.IPage;
import io.adrainty.bolee.insurance.models.entity.*;

import java.util.List;

/**
 * <p>IInsuranceRepository</p>
 *
 * @author AdRainty
 * @version V1.0.0
 * @description IInsuranceRepository
 * @since 2025/8/12 10:42:36
 */
public interface IInsuranceRepository {

    /**
     * 创建保险
     * @param insuranceEntity 保险实体
     * @return 创建结果
     */
    boolean createInsurance(InsuranceEntity insuranceEntity);

    /**
     * 修改保险
     * @param insuranceEntity 保险实体
     * @return 修改结果
     */
    boolean updateInsurance(InsuranceEntity insuranceEntity);

    /**
     * 根据保险ID查询保险
     * @param insuranceId 保险ID
     * @return 保险实体
     */
    InsuranceEntity getInsuranceById(Long insuranceId);

    /**
     * 获取保险分页
     * @param pageNum 页码
     * @param pageSize 页大小
     * @param insuranceEntity 搜索条件
     * @return 保险分页
     */
    IPage<InsuranceEntity> getInsurancePage(Integer pageNum, Integer pageSize, InsuranceEntity insuranceEntity);

    /**
     * 创建保险计划
     * @param insurancePlanVOs 保险计划
     */
    void createInsurancePlans(List<InsurancePlanEntity> insurancePlanVOs);

    /**
     * 保存批量保险计划
     * @param planEarningsEntities 保存批量保险计划
     */
    void saveBatchPlanEarnings(List<PlanEarningsEntity> planEarningsEntities);

    /**
     * 保存批量保险计划保障项
     * @param planSafeguardEntities 保存批量保险计划保障项
     */
    void saveBatchPlanSafeguard(List<PlanSafeguardEntity> planSafeguardEntities);

    /**
     * 根据保险id查询保险计划
     * @param insuranceId 保险id
     * @return 保险计划
     */
    List<InsurancePlanEntity> getPlansByInsuranceId(Long insuranceId);

    /**
     * 删除保险计划
     * @param planIds 保险计划id
     */
    void deletePlanByPlanId(List<Long> planIds);

    /**
     * 删除保险计划保障项
     * @param planIds 保障项id
     */
    void deletePlanSafeguardByPlanId(List<Long> planIds);

    /**
     * 删除保险计划收益计划
     * @param planIds 收益计划id
     */
    void deletePlanEarningsByPlanId(List<Long> planIds);

    /**
     * 获取保险系数项列表
     * @param coefficientDTO 查询条件
     * @return 保险系数项列表
     */
    List<InsuranceCoefficientEntity> findCoefficientList(InsuranceCoefficientEntity coefficientDTO);

    /**
     * 获取保险计划列表
     * @param planDTO 保险计划查询条件
     * @return 保险计划列表
     */
    List<InsurancePlanEntity> findPlanList(InsurancePlanEntity planDTO);

    /**
     * 获取保险系数项列表
     * @param conditionDTO 保险系数项查询条件
     * @return 保险系数项列表
     */
    List<InsuranceConditionEntity> findConditionList(InsuranceConditionEntity conditionDTO);

    /**
     * 获取保险计划保障项列表
     * @param planIds 保障项ID列表
     * @return 保障项列表
     */
    List<PlanSafeguardEntity> findPlanSafeguardByPlanId(List<Long> planIds);

    /**
     * 获取保险计划收益项列表
     * @param planIds 保险计划ID列表
     * @return 保险计划收益项列表
     */
    List<PlanEarningsEntity> findPlanEarningsByPlanId(List<Long> planIds);

    /**
     * 创建保险系数
     * @param insuranceCoefficientVOs 保险系数列表
     */
    void createInsuranceCoefficients(List<InsuranceCoefficientEntity> insuranceCoefficientVOs);

    /**
     * 删除保险系数
     * @param insuranceId 保险ID
     */
    void deleteInsuranceCoefficientByInsuranceId(Long insuranceId);

    /**
     * 创建保险筛选项
     * @param conditionEntities 保险筛选项列表
     */
    void createInsuranceConditions(List<InsuranceConditionEntity> conditionEntities);

    /**
     * 删除保险筛选项
     * @param insuranceId 保险ID
     */
    void deleteInsuranceConditionByInsuranceId(Long insuranceId);

    /**
     * 获取保险列表
     * @param insuranceEntity 保险查询条件
     * @return 保险列表
     */
    List<InsuranceEntity> listInsurance(InsuranceEntity insuranceEntity);
}
